<?php
/*
Plugin Name: adLeeX - training
Description: Crea una innovativa piattaforma per progettare, erogare e rendicontare corsi di formazione. Modulo di erogazione
Plugin URI:  http://www.mesolutions.it/
Version:     0.1
Author:      Luca De Cristofano
Author URI:  http://www.mesolutions.it/
*/



define('ADLEEX_DOMAIN','adleex');

if (defined('WP_HELPER')) {
    
define ('ADLEEX_TRAINING','0.1');


    require_once "adleex_includes.php";

    require_once "adleex_setting.php";
    //require_once "adleex_taxonomy_oldstyle.php";
    require_once "adleex_taxonomy.php";
    //require_once "adleex_box_oldstyle.php";
    require_once "adleex_box.php";


    require_once 'document.php';
    require_once 'thread.php';
    require_once 'activity.php';
 

    require_once 'resource.php';
    require_once 'course.php';
    require_once 'module.php';
    require_once 'lesson.php';

    require_once 'enrollment.php';
    require_once 'finance.php';
    require_once 'bill.php';
    require_once 'payment.php';


    require_once 'update_post.php';
    
    

$adleex_queries=array(
    // corsi
    'courses_approved' => array( 'post_type' => 'course', 'post_status'=> array('publish', 'approved')),
    'courses_published' => array( 'post_type' => 'course', 'post_status'=> array('publish')),
	'courses_closed' => array( 'post_type' => 'course', 'post_status'=> array('closed')),
    'courses_all' => array( 'post_type' => 'course', 'post_status'=> array('any')),


    // utenti : da utilizzare con get_users
    'users_all'   => array( 'blog_id' => 1),
    'users_withresource' => array('blog_id' => 1),
    'users_courserole' => array('blog_id' => 1),
    // moduli
    //'modules_published' => array( 'post_type' => 'wpf_modulo', 'post_status'=> array('publish','approved')),
    'modules_course' => array('post_type' => 'module', 'post_parent' => '%1:s', 'orderby' => 'menu_order', 'order' => 'asc', 'post_status'=> array('any')),
//    'modules_unassocied' => array('post_type' => 'wpf_modulo', 'post_parent' => 0, 'orderby' => 'post_title', 'order' => 'asc'),
		
	// allegati
	'attachements_document' => 	array('post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => '%1:s', 'orderby' => 'post_title', 'order' => 'asc'),	
	'attachements_published_document' => 	array('post_type' => 'attachment', 'numberposts' => -1, 'post_status' => array('publish'), 'post_parent' => '%1:s', 'orderby' => 'post_title', 'order' => 'asc'),
		
	// risorse	
	'resources_published' => array( 'post_type' => 'adleex_resource', 'post_status'=> array('publish')),
    // schedespesa
    'schedespesa_progetto' => array('post_type' => 'wpf_scheda_spesa', 'post_parent' => '%1:s', 'orderby' => 'menu_order', 'order' => 'asc'),
    'schedespesa_spesa' => array('post_type' => 'wpf_scheda_spesa', 'post_parent' => '%1:s', 'orderby' => 'menu_order', 'order' => 'asc'),
    'schedespesa_nonassociate' => array('post_type' => 'wpf_scheda_spesa', 'post_parent' => 0, 'orderby' => 'post_title', 'order' => 'asc'),
    // corsi
    'corsi_progetto' => array('post_type' => 'wpf_corso', 'post_parent' => '%1:s', 'orderby' => 'menu_order', 'order' => 'asc'),
    'corsi_nonassociati' => array('post_type' => 'wpf_corso', 'post_parent' => 0, 'orderby' => 'post_title', 'order' => 'asc'),
    'corsi_pubblicati' => array('post_type' => 'wpf_corso',  'post_status'=> array('publish','approved'), 'orderby' => 'post_title', 'order' => 'asc'),
    
    // assegnazioni
    'assegnazioni_risorsa' => array('post_type' => 'wpf_assegnazione', 'post_parent' => '%1:s', 'orderby' => 'order'),
    'assegnazioni_spesa' => array('post_type' => 'wpf_assegnazione', 'post_parent' => '%1:s', 'orderby' => 'order'),
    'assegnazioni_nonassociate' => array('post_type' => 'wpf_assegnazione', 'post_parent' => 0, 'orderby' => 'post_title', 'order' => 'asc'),
    //risorse
    'risorse_tutte' => array( 'post_type' => 'wpf_risorsa', 'post_status'=> array('approved','publish','close'),'orderby' => 'post_title', 'order' => 'asc'),
    'fatture_emesse' => array( 'post_type' => 'wpf_fattura_emessa', 'post_status'=> array('approved','publish','close'),'orderby' => 'post_title', 'order' => 'asc'),
    'contratti_tutti' => array( 'post_type' => 'wpf_contratto', 'post_status'=> array('approved','publish','close'),'orderby' => 'post_title', 'order' => 'asc'),
    
    // spese
    'spese_tutte' => array( 'post_type' => 'wpf_spesa', 'orderby' => 'post_title', 'order' => 'asc'),
    'spese_nonassociate' => array( 'post_type' => 'wpf_spesa', 'post_parent' => 0, 'orderby' => 'post_title', 'order' => 'asc'),
    'spese_corso' => array('post_type' => 'wpf_spesa', 'post_parent' => '%1:s', 'orderby' => 'order'),
    'fatture_ricevute' => array( 'post_type' => 'wpf_fattura_ricevuta', 'orderby' => 'post_title', 'order' => 'asc'),
    
    
    // questo lo devo verificare se serve
    'partners_progetto' => array('post_type' => 'wpf_???', 'post_parent' => '%1:s', 'orderby' => 'menu_order', 'order' => 'asc'),
    'partners_tutti' => array('post_type' => 'wpf_partner'),
    'pagamenti_fattura_ricevuta' => array('post_type' => 'wpf_pagamento', 'post_parent' => '%1:s', 'orderby' => 'menu_order', 'order' => 'asc'),
    
	// TODO: query di prova
	'contenuti_tutti'   => array(),
);


function adleex_training_activate() {
		
	
		
		// add new capabilities to admin
		adleex_define_cap('course','courses');
		adleex_define_cap('module','modules');
		adleex_define_cap('document','documents');
		adleex_define_cap('resource','resources');
		adleex_define_cap('thread','threads');
		adleex_define_cap('activity','activities');
		adleex_define_cap('enrollment','enrollments');
		adleex_define_cap('resource','documents');

        adleex_define_cap('','',array('manage_adleex'));

        $admin = get_role('administrator');
        $admin->add_cap('manage_adleex_finance');
        $admin->add_cap('manage_adleex_design');
        $admin->add_cap('manage_adleex_play');


}

// inizializzazione plugin
function adleex_training_init() {

    // creo qualunque cosa non legata ai post


    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters('plugin_locale', get_locale(), ADLEEX_DOMAIN);

    load_textdomain(ADLEEX_DOMAIN, WP_LANG_DIR.'/'.ADLEEX_DOMAIN.'/'.ADLEEX_DOMAIN.'-'.$locale.'.mo');
    load_plugin_textdomain(ADLEEX_DOMAIN, FALSE, dirname(plugin_basename(__FILE__)).'/languages/');

    //creo un posttype fittizio che mi serve solo per gestire le tassonomie ed altre cose del genere
    adleex_dummy_create();


    // aggiungo gli stati
    register_post_status( 'approved', array(
			    'label'       => __('Approved', ADLEEX_DOMAIN ),
			    'public'      => true,
			    '_builtin'    => false,
			    'label_count' => _n_noop( 'Approved <span class="count">(%s)</span>', 'Approved <span class="count">(%s)</span>' ),
			    'show_in_admin_all_list' => true,
			    'exclude_from_search' => true,
			    'show_in_admin_status_list' => true
			    ) 
    );
    
    register_post_status( 'closed', array(
			    'label'       => __( 'Closed', ADLEEX_DOMAIN ),
			    'public'      => true,
			    '_builtin'    => false,
			    'label_count' => _n_noop( 'Closed <span class="count">(%s)</span>', 'Closed <span class="count">(%s)</span>' ),
			    'show_in_admin_all_list' => true,
			    'exclude_from_search' => true,
			    'show_in_admin_status_list' => true
			    ) 
    );
    register_post_status( 'obsolete', array(
			    'label'       => __( 'Obsolete', ADLEEX_DOMAIN ),
			    'public'      => true,
			    '_builtin'    => false,
			    'label_count' => _n_noop( 'Obsolete <span class="count">(%s)</span>', 'Obsolete <span class="count">(%s)</span>' ),
			    'show_in_admin_all_list' => true,
			    'exclude_from_search' => true,
			    'show_in_admin_status_list' => true
			    )
    );
}



// menu amministrazione
function adleex_training_menu() {

    // pagine riassuntive
  //add_menu_page(  $parent_slug,     $page_title,             $menu_title, $capability,      $menu_slug,       $function,           $icon_url, $position );

    // menu adleex
    add_menu_page(                    'AdLeeX Reports',      'AdLeeX',     'read', 'adleex_reports', 'adleex_reports_page', '','103' );
    //sotto pagine di Erogazione
    add_submenu_page( 'adleex_reports', 'AdLeeX Design',      'Design',     'manage_adleex_design', 'adleex_design',    'adleex_design_page' );
    add_submenu_page( 'adleex_reports', 'AdLeeX Play',          'Play',     'manage_adleex_play', 'adleex_play',    'adleex_play_page' );
    add_submenu_page( 'adleex_reports', 'AdLeeX Finance',    'Finance',     'manage_adleex_finance', 'adleex_finance',    'adleex_finance_page' );
    add_submenu_page( 'adleex_reports', 'AdLeeX Support Page',    'Supports',     'read', 'adleex_support',    'adleex_support_page' );

    // opzioni di configurazione nel menu impostazioni
    add_submenu_page( 'options-general.php',      'AdLeeX Options',            'AdLeeX',   'manage_options',   'adleex_options',           'adleex_options_page' );

    
    // riordino dei menu
    admin_move_menu('menu-posts-adleex_document', 'menu-posts');
    
    
    admin_move_menu('menu-comments', 'menu-dashboard');    
    admin_move_menu('menu-posts-adleex_thread', 'menu-dashboard');
    admin_move_menu('menu-posts-adleex_activity', 'menu-dashboard');
    admin_move_menu('menu-posts-adleex_enrollment', 'menu-dashboard');

    admin_move_menu('menu-posts-finance', 'menu-dashboard');
    admin_move_menu('menu-posts-adleex_resource', 'menu-dashboard');   
    admin_move_menu('menu-posts-course', 'menu-dashboard');
    add_menu_div   ('menu-posts-finance');




    add_menu_div   ('menu-dashboard');
    admin_move_menu('toplevel_page_adleex_reports', 'menu-dashboard');
    //admin_move_menu('toplevel_page_adleex_design', 'menu-dashboard');


}




function adleex_design_page() {
    
        // read
    admin_panel('adleex_design_page',
                'admin.php?page=adleex_design_page',
                'Active project',
                'Page to control courses status',
                'ver. 00',
                ADLEEX_DOMAIN);
/*
    ?>
        <h2>Progettazioni in corso</h2>
        <p>E' uscito un nuovo bando o è stata richiesto un nuovo corso? <a href="post-new.php?post_type=wpf_commessa" title="Pagina per la creazione di una nuova commessa"> crea la commessa </a> </p>
        <p>Commesse attive <p>
            <table class="wp-list-table widefat fixed" cellspacing="0">
                <thead>
                    <tr><th scope="col">Commessa</th><th scope="col">Stato</th><th scope="col"></th></tr>
                </thead>
                <tbody>    
                <?php
                $commesse = get_posts(wpf_get_query('commesse_tutte'));
                foreach ($commesse as $commessa ) {
                    echo "<tr><td>".$commessa->post_title."</td>";
                    $stato = $commessa->post_status;
                    // se non ho progetti figli, non posso mettere la commessa in stato pubblico!!!
                    $progetti_figli = get_posts(wpf_get_query('progetti_commessa',$commessa->ID));
                    if (count($progetti_figli)==0) $stato='no_project';
                    else {
                        foreach($progetti_figli as $progetto) {
                            // nel caso vi siano più progetti figli, questo metodo da qualche errore....
                            
                            if ($progetto->post_status=='approved') 
                                    if (get_postmeta($commessa->ID,'richiesta',true)=='')
                                                                $stato='require_richiesta';
                                    elseif (get_postmeta($commessa->ID,'determina',true)=='')
                                                                $stato='require_determina';
                                    elseif (get_postmeta($commessa->ID,'contratto',true)=='')
                                                               $stato ='require_contratto';
                                    elseif ($commessa->post_status=='draft') 
                                                               $stato ='require_publish'; 
                            // ed i progetti in bozza?
                        }
                        if ($commessa->post_status=='publish') {
                            // devo verificare, adesso, la presenza di corsi in erogazione
                            $corsi = get_posts(wpf_get_query('commesse_tutte'));
                            if (count($corsi)==0) $stato = 'require_course';
                            else foreach($corsi as $c => $corso) {
                                        if ($corso->post_status=='draft') $stato = 'require_pendig'; // il corso in pratica è da fare
                                        elseif ($corso->post_status=='pending') $stato = 'require_start'; // il corso è pronto deve solo essere pubblicato per dire che gli utenti possono iscriversi
                                        elseif ($corso->post_status=='publish') $stato = 'publish'; // il corso è pronto ed in attesa di erogazione
                                        elseif ($corso->post_status=='going') $stato = 'going'; // il corso è in erogazione : non posso fare nulla
                                        elseif ($corso->post_status=='closed') { // il corso è terminato
                                            // ho rendicontato oppure no ? devo verificarlo sui documenti caricati nel corso... o nel progetto? 
                                            $stato = 'closed'; 
                                        }
                                        
                                 }
                             
                        }
                    }
                    
                    
                    switch ($stato) {
                        case 'draft' : echo "<td>Questa commessa è in bozza</td><td></td>";
                        break;
                        case 'no_project' : echo  '<td>Questa commessa è senza progetto </td>
                                                <td><a href="/edit.php?post_type=wpf_progetto&parent='.$commessa->ID.'" title="Vai alla pagina per creare un nuovo progetto">Crea un nuovo progetto</a></td>';
                        break;
                        case 'require_richiesta' : echo  '<td>Questa commessa ha un progetto approvato </td>
                                                <td><a <a href="/post.php?post='.$commessa->ID.'&action=edit" title="Vai alla pagina della commessa">Richiedi la delibera o i fondi</a></td>';
                        break;
                        case 'require_determina' : echo  '<td>Questa commessa ha una richiesta di determina</td>
                                                <td><a href="/post.php?post='.$commessa->ID.'&action=edit" title="Vai alla pagina della commessa">Inserisci la delibera o determina di approvazione</a></td>';
                        break;
                        case 'require_contratto' : echo  '<td>Questa commessa ha una determina approvata</td>
                                                <td><a href="/post.php?post='.$commessa->ID.'&action=edit" title="Vai alla pagina della commessa">Inserisci la convenzone o il contratto</a></td>';
                        break;
                        case 'require_publish' : echo  '<td>Questa commessa è pronta per l\'erogazione dei corsi</td>
                                                <td><a <a href="/post.php?post='.$commessa->ID.'&action=edit" title="Vai alla pagina della commessa">Pubblicala</a></td>';
                        break;
                        case 'require_course' : echo  '<td>Questa commessa è pronta per l\'erogazione dei corsi</td>
                                                <td><a href="post-new.php?post_type=wpf_corso" title="Crea un nuovo corso">Crea un corso</a></td>';
                        break;
                        case 'require_pending' : echo  '<td>Questa commessa è pronta per l\'erogazione dei corsi</td>
                                                <td><a href="post-new.php?post_type=wpf_corso" title="Crea un nuovo corso">Avvia i corsi</a></td>';
                        break;
                        case 'require_start' : echo  '<td>I corsi stanno partendo</td>
                                                <td></td>';
                        break;
                        case 'publish' : echo  '<td>I corsi stanno partendo</td>
                                                <td></td>';
                        break;
                        case 'going' : echo  '<td>I corsi sono in erogazione</td>
                                                <td></td>';
                        break;
                        case 'closed' : echo  '<td>I corsi sono conclusi</td>
                                                <td><a href="post-new.php?post_type=wpf_corso" title="Crea un nuovo corso">Rendiconta</a></td>';
                        break;
                        case 'terminated' : echo  '<td>I corsi sono rendicontati</td>
                                                <td><a href="post-new.php?post_type=wpf_corso" title="Crea un nuovo corso">Eroga un nuovo corso</a></td>';
                        break;
                    }
                    echo "</tr>\n";
                }
    
        ?>
        </tbody>
       </table>
        <a href="/edit.php?post_type=wpf_commessa" title="Vai alla pagina delle commesse">Vedi tutte le commesse</a> 
            ... questa commessa ha questi questi corsi in erogazione
            ... questa commessa ha questi corsi conclusi da rendicontare... rendiconta il corso
            ... questa commessa è conclusa. Vuoi erogare un nuovo corso? ... eroga un nuovo corso
        
        <p>Progetti attivi: <br />
            .... questo progetto è da approvare .... vedi
            .... questo progetto ha moduli e schede spesa non approvate... vedi
            .... questo modulo non ha contenuti ne schede attività ... vedi 
        </p>
        <p>Corsi: <br />
            .... questo corso mancano le attività e le spese ....
            ... questo corso è pronto per essere chiuso ...
        </p>
        
        <?php
*/
    admin_panel_close();
    
    
}



function adleex_play_page() {
	
}


function adleex_training_savelabel($action) {
	switch ($action['label']) {
		case 'approved' 	: $action['label']='Save as approved'; break;
		case 'closed' 		: $action['label']='Save as closed'; break;		
	}
	return $action;
}

function adleex_training_publishlabel($action) {
	switch ($action['label']) {
		case 'approved' 	: $action['label']='Approve'; break;
		case 'closed' 		: $action['label']='Close'; break;		
	}
	return $action;
}

function adleex_training_statuslabel($label) {
	if 		($label=='approved') 	return 'Approved';
	elseif 	($label=='closed') 		return 'Closed'; 
	else 							return $label;
}

//@WIP attivazione degli hook
function adleex_training_hook(){
register_activation_hook(__FILE__, 'fascicoli_rewrite_flush');  
add_action('activate_plugin', 'adleex_training_activate'); 
add_action('init', 'adleex_training_init',5); 
add_action('admin_menu', 'adleex_training_menu'); 
add_action('save_action','adleex_training_savelabel');
add_action('publish_action', 'adleex_training_publishlabel');
add_action('status_label', 'adleex_training_statuslabel');

//add_filter('save_action','adleex_save_action');
//add_filter('publish_action','adleex_publish_action');


}




adleex_training_hook();



} else {
	add_action('admin_notices', 'adleex_noframework_notice');
}
// defined(ADMIN_HELPER)

function adleex_noframework_notice(){
	global $pagenow;
	if ( $pagenow == 'plugins.php' ) {
		echo '<div class="updated">
             <p>To activate AdLeeX plugin you must install and activate <b>WP HELPER</b> plugin .</p>
         </div>';
	}
}

?>